package com.unitd.frame.mybatis.interceptor;

import com.unitd.frame.mybatis.plugin.MybatisPluginInterceptor;
import org.apache.ibatis.plugin.Invocation;

/**
 * @desc Mybatis插件拦截处理器接口, 所有需要处理mybatis的拦截器都需实现此接口
 * @filename IInterceptorHandler.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017/2/5
 */
public interface IInterceptorHandler {

	/**
	 * @desc 进入拦截器,开始进行拦截处理
	 * @param context Mybatis上下文
	 */
	void start(MybatisPluginInterceptor context);

	/**
	 * @desc 设置不同拦截器的加载顺序
	 * @return int
	 */
	int interceptorOrder();

	/**
	 * @desc 拦截器开启调用拦截处理
	 * @param invocation 调用器
	 */
	Object onInterceptor(Invocation invocation) throws Throwable;

	/**
	 * @desc 结束拦截调用处理
	 * @param invocation 调用器
	 * @param result 结果对象
	 */
	void onFinished(Invocation invocation, Object result);

	/**
	 * @desc 关闭拦截器,退出拦截
	 */
	void close();
}